package com.nightsoul.shirotest.session.dao;

import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;

import org.apache.shiro.session.Session;
import org.apache.shiro.session.mgt.eis.CachingSessionDAO;

/**
 * 继承自CachingSessionDAO后，所有在读取时会先查缓存中是否存在，如果找不到才到sessionMap中查找。
 * @author zj
 *
 */
public class MySessionDao extends CachingSessionDAO {
	// 实际情况可以存储至其它地方
	private Map<Serializable, Session> sessionMap = new HashMap<>();

	@Override
	protected void doUpdate(Session session) {
		this.sessionMap.put(session.getId(), session);
	}

	@Override
	protected void doDelete(Session session) {
		this.sessionMap.remove(session.getId());
	}

	@Override
	protected Serializable doCreate(Session session) {
		Serializable sessionId = super.generateSessionId(session);
		super.assignSessionId(session, sessionId);
		this.sessionMap.put(sessionId, session);
		return session.getId();
	}

	@Override
	protected Session doReadSession(Serializable sessionId) {
		return this.sessionMap.get(sessionId);
	}

}
